/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package hoja7;

import estructuras.ArrayListPQ;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.io.Reader;
import java.util.Arrays;
import java.util.Collections;
import java.util.Date;
import java.util.LinkedList;

/**
 *
 * @author asus
 * Clase que maneja el ordenamiento a través de un heap de estudiantes
 */
public class Escuela {
    
    private File archivo;
    
    private ArrayListPQ<Estudiante> colaPrioridadC;
    
    private ArrayListPQ<Estudiante> colaPrioridadF;
    
    private Hoja7 interfaz;
    
    private BufferedReader lectorA;
    private BufferedReader lectorB;
    
    public Escuela(Hoja7 gui) {
        interfaz = gui;
        colaPrioridadC = new ArrayListPQ<Estudiante>();
        colaPrioridadF = new ArrayListPQ<Estudiante>();
    }
    
    public void cargarArchivo(File arch) throws Exception {
        archivo = arch;
        try {
            lectorA = new BufferedReader(new InputStreamReader(new FileInputStream(archivo)));
            lectorB = new BufferedReader(new InputStreamReader(new FileInputStream(archivo)));
            cargarCarnet();
            cargarFecha();
            desplegar();
        } catch (Exception e) {
            throw e;
        }
    }
    
    public void cargarCarnet() throws Exception {
        String linea;
        try {
            while((linea = lectorA.readLine()) != null) {
                String[] campos = linea.split(" ");
                String name = campos[0];
                int id = Integer.parseInt(campos[1]);
                int score = Integer.parseInt(campos[2]);
                String[] vals = campos[3].split("/");
                int[] date = {Integer.parseInt(vals[0]), Integer.parseInt(vals[1]), Integer.parseInt(vals[2])};
                Estudiante nuevo = new Estudiante(name, id, score, date);
                nuevo.establecerFecha(campos[3]);
                colaPrioridadC.add(nuevo);
            } 
          
        } catch (Exception e) {
              throw new Exception("El archivo contiene errores de formato"); 
        }
    }

    public void cargarFecha() throws Exception {
        String linea;
        try {
            while((linea = lectorB.readLine()) != null) {
                String[] campos = linea.split(" ");
                String name = campos[0];
                int id = Integer.parseInt(campos[1]);
                int score = Integer.parseInt(campos[2]);
                String[] vals = campos[3].split("/");
                int[] date = {Integer.parseInt(vals[0]), Integer.parseInt(vals[1]), Integer.parseInt(vals[2])};
                Estudiante nuevo = new Estudiante(name, id, score, date);
                nuevo.establecerFecha(campos[3]);
                colaPrioridadF.add(nuevo, Estudiante.DateComparator);
            } 
        } catch (Exception e) {
              throw new Exception("El archivo contiene errores de formato"); 
        }
    }
    
    private void desplegar() {
        interfaz.desplegar("Ordenados por carné: \n");
        int t = colaPrioridadC.size();
        for (int i = 0; i < t; i++) {
            Estudiante actual = colaPrioridadC.remove();
            interfaz.desplegar("Nombre: " + actual.darNombre());
            interfaz.desplegar("Carnet: " + actual.darCarnet());
            interfaz.desplegar("Calificacion: " + actual.darCalificacion());
            interfaz.desplegar("Fecha de nacimiento: " + actual.darValorFecha());
            interfaz.desplegar("");
        }
        
        interfaz.desplegar("\n");
        
        interfaz.desplegar("Ordenados por fecha: \n");
        for (int i = 0; i < t; i++) {
            Estudiante actual = colaPrioridadF.remove();
            interfaz.desplegar("Nombre: " + actual.darNombre());
            interfaz.desplegar("Carnet: " + actual.darCarnet());
            interfaz.desplegar("Calificacion: " + actual.darCalificacion());
            interfaz.desplegar("Fecha de nacimiento: " + actual.darValorFecha());
            interfaz.desplegar("");
        }
    }
    
    
    
    
}
